package rkdwogus7.utils;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


// 3. 연동할 수 있는 클래스를 또 하나 만드는거야. 데이터베이스 관련 정보는 여기로
// mysql이나 mariadb등을 이용한다면 또 바꿔야 하겠지.
public class OracleJDBC {
	private static final String DRV = "oracle.jdbc.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:@//112.216.253.122:1521/xe";
	private static final String USR = "rkdwogus7";
	private static final String PWD = "rkdwogus7";
	
	private static final String ZIPCODE = "zipcode";
	
	public static Connection openZipcode() {
		Connection conn = null;
		try {
			Class.forName(DRV);
			conn = DriverManager.getConnection(URL, ZIPCODE, ZIPCODE);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return conn;
	}
	
	
	// oracle JDBC 객체 생성
	// new 연산자 없이 openConn method를 호출하기 휘해 static으로 선언
	public static Connection openConn() {
		Connection conn = null;
		try {
		Class.forName(DRV);
		conn = DriverManager.getConnection(URL, USR, PWD);
		} catch (Exception ex) {
			ex.printStackTrace();
		} 
		return conn;
		// 사용하기 편하게 데이터베이스 연결 시 반복적으로 사용되는 구문을 따로 클래스 처럼 빼 둔거야
	}
	
	// oracle JDBC 객체 종료 및 해제
	public static void closeConn(Connection c, PreparedStatement p, ResultSet r) {
		if (r != null) {
			try { r.close(); } catch (Exception e) { }
		}
		if (p != null) {
			try { p.close(); } catch (Exception e) { }
		}
		if (c != null) {
			try { c.close(); } catch (Exception e) { }
		}
		// 이렇게 해서 자주 사용하는 코드들을 합쳐 둔 거야. 여기까지 해 두고 DAO로 넘어가서
		// resultset이 필요 없는 crud작업 할 때는 r을 null로 주면 되잖아.
	}

	// 매 코드마다 연결 / 종료하는 것을 사용했을텐데, 그 부분을 편하게 하기 위해서 이렇게 만든거야
	// openconn은 연결객체, closeconn은 종료객체니까 이거 하나 만들어 두고
	// db관련 코드를 짤 때는 이것을 잘 사용하면 될 거야.
	// jp할때 connection free라는 것을 또 배울거야
	// singleton pattern에 대한 예제도 나오니까(java200제) 궁금하면 그걸 참고 하도록
}
